home *** CD-ROM | disk | FTP | other *** search
/ Disc to the Future 2 / Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin / MAC / THINKC / TCL1 / CDICTION / CSMARTWI.C < prev    next >
Text File  |  1990-01-08  |  6KB  |  227 lines

  1. /*****************************************************************************
  2. CSmartWindow.c
  3.  
  4.     see header for more information
  5.     
  6. SUPERCLASS = CWindow
  7. *****************************************************************************/
  8.  
  9. #include "CSmartWindow.h"
  10. #include "TBUtilities.h"
  11. #include "TaoUtils.h"
  12. #include "CSmartBartender.h"
  13. #include "CTextEnvirons.h"
  14. #include "Color.h"
  15. #include "OSChecks.h"
  16. #include "ColorToolbox.h"
  17. #include "CDesktop.h"
  18. #include "CDirector.h"
  19.  
  20. typedef struct    WINDtemplate {            /* Format of a WIND resource        */
  21.     Rect        boundsRect;
  22.     short        WDEFid;
  23.     short        visible;
  24.     short        goAwayFlag;
  25.     long        refCon;
  26.     Str255        title;
  27. } WINDtemplate, *WINDtemplateP, **WINDtemplateH;
  28.  
  29. extern CSmartBartender    *gBartender;
  30. /*****************************************************************************/
  31. void CSmartWindow::ISmartWindow(Int16 WINDid, Boolean aFloating,
  32.                     CView *anEnclosure, CBureaucrat *aSupervisor,
  33.                     Boolean sizeIsMax)
  34. {
  35.     TextInfoRec    textInfo;
  36.     WINDtemplateH theWIND;
  37.     Rect        r;
  38.  
  39.     CWindow::IWindow( WINDid, aFloating, (CDesktop*)anEnclosure, (CDirector*) aSupervisor);
  40.     
  41.     itsEnvirons = new( CTextEnvirons);
  42.     itsEnvirons->ITextEnvirons();
  43.     textInfo.fontNumber = GetPreferredFontNum();
  44.     textInfo.theSize = 12;
  45.     textInfo.theStyle = 0;
  46.     textInfo.theMode = srcOr;
  47.     itsEnvirons->SetTextInfo( &textInfo);
  48.     
  49.     /* if size is max we set up sizeRect so the WIND resource size
  50.         is our maximum size */
  51.     
  52.     if (sizeIsMax)
  53.     {
  54.         theWIND = (WINDtemplateH) GetResource('WIND', WINDid);
  55.         r = (**theWIND).boundsRect;
  56.         sizeRect.right = r.right - r.left;
  57.         sizeRect.bottom = r.bottom - r.top;
  58.         SetStdState( &r);
  59.         HPurge( theWIND);
  60.     }    
  61.  
  62. }    /* CSmartWindow::ISmartWindow */
  63. /*****************************************************************************/
  64. void CSmartWindow::MakeMacWindow(Int16 WINDid)
  65. {
  66.     PaletteHandle palH;
  67.     
  68.     if (ColorQDIsPresent())
  69.     {
  70.         macPort = GetNewCWindow(WINDid, NULL,
  71.             (floating ? (WindowPtr)(-1L) : NULL));
  72.             
  73.         palH = GetPalette( macPort);
  74.         if (!palH)    /* no palette for this window, use the default */
  75.         {
  76.             palH = GetNewPalette( 0);
  77.             if (palH) SetPalette( macPort, palH, TRUE);
  78.         }
  79.     }
  80.     else 
  81.         macPort = GetNewWindow(WINDid, NULL, 
  82.                     (floating ? (WindowPtr)(-1L) : NULL));
  83.     
  84. }    /* CSmartWindow::MakeMacWindow */
  85. /*****************************************************************************/
  86. void CSmartWindow::RestoreEnvirons( void)
  87. {
  88.     itsEnvirons->Restore();
  89.  
  90. }    /* CSmartWindow::RestoreEnvirons */
  91. /*****************************************************************************/
  92. void CSmartWindow::Prepare( void)
  93. {
  94.     inherited::Prepare();
  95.     itsEnvirons->Restore();
  96.  
  97. }    /* CSmartWindow::Prepare */
  98. /*****************************************************************************/
  99. void CSmartWindow::SetFontNumber(Int16 aFontNumber)
  100. {
  101.     TextInfoRec    textInfo;
  102.     WindowPtr    savedPort;
  103.     
  104.     itsEnvirons->GetTextInfo( &textInfo);
  105.     textInfo.fontNumber = aFontNumber;
  106.     itsEnvirons->SetTextInfo( &textInfo);
  107.     GetPort( &savedPort);
  108.     SetPort( macPort);
  109.     TextFont( aFontNumber);
  110.     SetPort( savedPort);
  111.     
  112. }    /* CSmartWindow::SetFontNumber */
  113. /*****************************************************************************/
  114. void CSmartWindow::SetFontName(Str255 aFontName)
  115. {
  116.     Int16        fontNum;            /* Corresponding font number            */
  117.     
  118.                                     /* Call utility to look up number for    */
  119.                                     /*   this font                            */
  120.     GetFontNumber(aFontName, &fontNum);
  121.     
  122.     if (fontNum >= 0) {                /* Legal font numbers are positive        */
  123.         SetFontNumber(fontNum);
  124.     }
  125.  
  126. }    /* CSmartWindow::SetFontName */
  127. /*****************************************************************************/
  128. void CSmartWindow::SetFontStyle(Int16 aStyle)
  129. {
  130.     TextInfoRec    textInfo;
  131.     WindowPtr    savedPort;
  132.     
  133.     itsEnvirons->GetTextInfo( &textInfo);
  134.     textInfo.theStyle = aStyle;
  135.     itsEnvirons->SetTextInfo( &textInfo);
  136.     
  137.     GetPort( &savedPort);
  138.     SetPort( macPort);
  139.     TextFace( aStyle);
  140.     SetPort( savedPort);
  141.     
  142. }    /* CSmartWindow::SetFontStyle */
  143. /*****************************************************************************/
  144. void CSmartWindow::SetFontSize(Int16 aSize)
  145. {
  146.     TextInfoRec    textInfo;
  147.     WindowPtr    savedPort;
  148.     
  149.     itsEnvirons->GetTextInfo( &textInfo);
  150.     textInfo.theSize = aSize;
  151.     itsEnvirons->SetTextInfo( &textInfo);
  152.     
  153.     GetPort( &savedPort);
  154.     SetPort( macPort);
  155.     TextSize( aSize);
  156.     SetPort( savedPort);
  157.     
  158. }    /* CSmartWindow::SetFontSize */
  159. /*****************************************************************************/
  160. void CSmartWindow::SetTextMode(Int16 aMode)
  161. {
  162.     TextInfoRec    textInfo;
  163.     WindowPtr    savedPort;
  164.     
  165.     itsEnvirons->GetTextInfo( &textInfo);
  166.     textInfo.theMode = aMode;
  167.     itsEnvirons->SetTextInfo( &textInfo);
  168.     
  169.     GetPort( &savedPort);
  170.     SetPort( macPort);
  171.     TextMode( aMode);
  172.     SetPort( savedPort);
  173.     
  174. }    /* CSmartWindow::SetTextMode */
  175. /*****************************************************************************/
  176. void CSmartWindow::ChangeSize(Int16 width, Int16 height)
  177. {
  178.     Int16    currWidth, currHeight;
  179.     
  180.     currWidth = macPort->portRect.right - macPort->portRect.left;
  181.     currHeight = macPort->portRect.bottom - macPort->portRect.top;
  182.     
  183.     
  184.     if ((currWidth == width) && (currHeight == height)) return;
  185.     
  186.     
  187.     inherited::ChangeSize( MIN( width, sizeRect.right), 
  188.                     MIN( height, sizeRect.bottom));
  189.  
  190. }    /* CSmartWindow::ChangeSize */
  191. /*****************************************************************************/
  192. void CSmartWindow::BeModal( void)
  193. {
  194.     if (!isModal)
  195.     {
  196.         isModal = TRUE;
  197.         Select();                        /* make sure we're in front */    
  198.         gBartender->DisableAllMenus();    /* disable the menu bar */
  199.     }
  200.  
  201. }    /* CSmartWindow::BeModal */
  202. /*****************************************************************************/
  203. void CSmartWindow::ReleaseMode( void)
  204. {
  205.     if (isModal)
  206.     {
  207.         isModal = FALSE;
  208.         gBartender->EnableAllMenus();
  209.     }
  210.  
  211. }    /* CSmartWindow::ReleaseMode */
  212. /*****************************************************************************/
  213. Boolean CSmartWindow::IsModal( void)
  214. {
  215.     return isModal;
  216.  
  217. }    /* CSmartWindow::IsModal */
  218. /*****************************************************************************/
  219.  
  220. void CSmartWindow::Dispose( void)
  221. {
  222.     if (itsEnvirons) itsEnvirons->Dispose();
  223.     inherited::Dispose();
  224.  
  225. }    /* CSmartWindow::Dispose */
  226. /*****************************************************************************/
  227.